package com.sxj.corejava.code06_lambda表达式;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/21日 19:40
 */
public class Test01_基本用法 {
    public static void main(String[] args) {
        SomeInterface someInterface = new SomeInterface() {
            @Override
            public int sum(int i, int j) {
                return i + j;
            }
        };
        int sum = someInterface.sum(1, 2);
        System.out.println(sum);

        // SomeInterface someInterface2 = (int i, int j) -> {return i+j;};
        // 参数类型可以省略
        // SomeInterface someInterface2 = (i,j) -> {return i+j;};
        // 当方法体中有且仅有一行代码,且这一行代码是return语句的时候
        // 那么方法体的大括号与return关键字可以省略
        SomeInterface someInterface2 = (i, j) -> i + j;
        int sum2 = someInterface2.sum(2, 3);
        System.out.println(sum2);

        OtherInterface otherInterface = new OtherInterface() {
            @Override
            public void show() {
                System.out.println("这是匿名内部类用法");
            }
        };
        otherInterface.show();

//        OtherInterface otherInterface2 = () -> {
//            System.out.println("这是Lambda表达式用法");
//        };
        // 当方法体中有且仅有一行的时候,方法体的大括号可以省略
        OtherInterface otherInterface2 = () -> System.out.println("这是Lambda表达式用法");
        otherInterface2.show();

        MyInterface myInterface = new MyInterface() {
            @Override
            public void test(String s) {
                System.out.println("这是匿名内部类用法,参数为:" + s);
            }
        };
        myInterface.test("admin");

        // MyInterface myInterface2 = (s) ->  System.out.println("这是Lambda用法,参数为:"+s);
        // 当方法参数有且仅有一个的时候,小括号可以省略
        MyInterface myInterface2 = s -> System.out.println("这是Lambda用法,参数为:" + s);
        myInterface2.test("alice");
    }
}

interface SomeInterface {
    int sum(int i, int j);

    default void show(){
        System.out.println();
    }
}

class SomeClass implements SomeInterface {

    @Override
    public int sum(int i, int j) {
        return i + j;
    }
}

interface OtherInterface {
    void show();
}

interface MyInterface {
    void test(String s);
}

